home *** CD-ROM | disk | FTP | other *** search
- // Copyright (C) 2001-2002 Raven Software.
- //
- // User interface building blocks and support functions.
-
- #include "ui_local.h"
-
- // these are here so the functions in q_shared.c can link
- #ifndef UI_HARD_LINKED
-
- /*
- =================
- Com_Error
-
- reports an error to the console and shuts down any active game
- =================
- */
- void QDECL Com_Error( int level, const char *error, ... )
- {
- va_list argptr;
- char text[1024];
-
- va_start (argptr, error);
- vsprintf (text, error, argptr);
- va_end (argptr);
-
- trap_Error( va("%s", text) );
- }
-
- /*
- =================
- Com_Printf
-
- Outputs text to the console
- =================
- */
- void QDECL Com_Printf( const char *msg, ... )
- {
- va_list argptr;
- char text[1024];
-
- va_start (argptr, msg);
- vsprintf (text, msg, argptr);
- va_end (argptr);
-
- trap_Print( va("%s", text) );
- }
-
- #endif
-
- char *UI_Argv( int arg ) {
- static char buffer[MAX_STRING_CHARS];
-
- trap_Argv( arg, buffer, sizeof( buffer ) );
-
- return buffer;
- }
-
-
- char *UI_Cvar_VariableString( const char *var_name ) {
- static char buffer[MAX_STRING_CHARS];
-
- trap_Cvar_VariableStringBuffer( var_name, buffer, sizeof( buffer ) );
-
- return buffer;
- }
-
-
-
- static void UI_Cache_f()
- {
- Display_CacheAll();
- }
-
- /*
- =================
- UI_ConsoleCommand
- =================
- */
- qboolean UI_ConsoleCommand( int realTime )
- {
- char *cmd;
-
- uiInfo.uiDC.frameTime = realTime - uiInfo.uiDC.realTime;
- uiInfo.uiDC.realTime = realTime;
-
- cmd = UI_Argv( 0 );
-
- // ensure minimum menu data is available
- //Menu_Cache();
- if ( Q_stricmp (cmd, "ui_report") == 0 )
- {
- UI_Report();
- return qtrue;
- }
-
- if ( Q_stricmp (cmd, "ui_reload") == 0 )
- {
- UI_Reload();
- return qtrue;
- }
-
- if ( Q_stricmp ( cmd, "ui_openmenu" ) == 0 )
- {
- // Menus_CloseAll ( );
- Menus_OpenByName ( UI_Argv(1) );
- return qtrue;
- }
-
- if ( Q_stricmp (cmd, "remapShader") == 0 )
- {
- if (trap_Argc() == 4)
- {
- char shader1[MAX_QPATH];
- char shader2[MAX_QPATH];
- Q_strncpyz(shader1, UI_Argv(1), sizeof(shader1));
- Q_strncpyz(shader2, UI_Argv(2), sizeof(shader2));
- trap_R_RemapShader(shader1, shader2, UI_Argv(3));
- return qtrue;
- }
- }
-
- if ( Q_stricmp (cmd, "ui_cache") == 0 )
- {
- UI_Cache_f();
- return qtrue;
- }
-
- if ( Q_stricmp (cmd, "ui_cdkey") == 0 )
- {
- //UI_CDKeyMenu_f();
- return qtrue;
- }
-
- return qfalse;
- }
-
- /*
- =================
- UI_Shutdown
- =================
- */
- void UI_Shutdown( void )
- {
- }
-
- /*
- ================
- UI_AdjustFrom640
-
- Adjusted for resolution and screen aspect ratio
- ================
- */
- void UI_AdjustFrom640( float *x, float *y, float *w, float *h ) {
- // expect valid pointers
- #if 0
- *x = *x * uiInfo.uiDC.scale + uiInfo.uiDC.bias;
- *y *= uiInfo.uiDC.scale;
- *w *= uiInfo.uiDC.scale;
- *h *= uiInfo.uiDC.scale;
- #endif
-
- *x *= uiInfo.uiDC.xscale;
- *y *= uiInfo.uiDC.yscale;
- *w *= uiInfo.uiDC.xscale;
- *h *= uiInfo.uiDC.yscale;
-
- }
-
- void UI_DrawNamedPic( float x, float y, float width, float height, const char *picname ) {
- qhandle_t hShader;
-
- hShader = trap_R_RegisterShaderNoMip( picname );
- UI_AdjustFrom640( &x, &y, &width, &height );
- trap_R_DrawStretchPic( x, y, width, height, 0, 0, 1, 1, NULL, hShader );
- }
-
- void UI_DrawHandlePic( float x, float y, float w, float h, qhandle_t hShader ) {
- float s0;
- float s1;
- float t0;
- float t1;
-
- if( w < 0 ) { // flip about vertical
- w = -w;
- s0 = 1;
- s1 = 0;
- }
- else {
- s0 = 0;
- s1 = 1;
- }
-
- if( h < 0 ) { // flip about horizontal
- h = -h;
- t0 = 1;
- t1 = 0;
- }
- else {
- t0 = 0;
- t1 = 1;
- }
-
- UI_AdjustFrom640( &x, &y, &w, &h );
- trap_R_DrawStretchPic( x, y, w, h, s0, t0, s1, t1, NULL, hShader );
- }
-
- /*
- ================
- UI_FillRect
-
- Coordinates are 640*480 virtual values
- =================
- */
- void UI_FillRect( float x, float y, float width, float height, const float *color )
- {
- trap_R_SetColor( color );
-
- UI_AdjustFrom640( &x, &y, &width, &height );
- trap_R_DrawStretchPic( x, y, width, height, 0, 0, 0, 0, NULL, uiInfo.uiDC.whiteShader );
-
- trap_R_SetColor( NULL );
- }
-
- void UI_DrawSides(float x, float y, float w, float h) {
- UI_AdjustFrom640( &x, &y, &w, &h );
- trap_R_DrawStretchPic( x, y, 1, h, 0, 0, 0, 0, NULL, uiInfo.uiDC.whiteShader );
- trap_R_DrawStretchPic( x + w - 1, y, 1, h, 0, 0, 0, 0, NULL, uiInfo.uiDC.whiteShader );
- }
-
- void UI_DrawTopBottom(float x, float y, float w, float h) {
- UI_AdjustFrom640( &x, &y, &w, &h );
- trap_R_DrawStretchPic( x, y, w, 1, 0, 0, 0, 0, NULL, uiInfo.uiDC.whiteShader );
- trap_R_DrawStretchPic( x, y + h - 1, w, 1, 0, 0, 0, 0, NULL, uiInfo.uiDC.whiteShader );
- }
- /*
- ================
- UI_DrawRect
-
- Coordinates are 640*480 virtual values
- =================
- */
- void UI_DrawRect( float x, float y, float width, float height, const float *color )
- {
- trap_R_SetColor( color );
-
- UI_DrawTopBottom(x, y, width, height);
- UI_DrawSides(x, y, width, height);
-
- trap_R_SetColor( NULL );
- }
-
- void UI_SetColor( const float *rgba )
- {
- trap_R_SetColor( rgba );
- }
-
- void UI_UpdateScreen( qboolean IsLoading ) {
- trap_UpdateScreen(IsLoading);
- }
-
-
- void UI_DrawTextBox (int x, int y, int width, int lines)
- {
- UI_FillRect( x + BIGCHAR_WIDTH/2, y + BIGCHAR_HEIGHT/2, ( width + 1 ) * BIGCHAR_WIDTH, ( lines + 1 ) * BIGCHAR_HEIGHT, colorBlack );
- UI_DrawRect( x + BIGCHAR_WIDTH/2, y + BIGCHAR_HEIGHT/2, ( width + 1 ) * BIGCHAR_WIDTH, ( lines + 1 ) * BIGCHAR_HEIGHT, colorWhite );
- }
-
- qboolean UI_CursorInRect (int x, int y, int width, int height)
- {
- if (uiInfo.uiDC.cursorx < x ||
- uiInfo.uiDC.cursory < y ||
- uiInfo.uiDC.cursorx > x+width ||
- uiInfo.uiDC.cursory > y+height)
- return qfalse;
-
- return qtrue;
- }
-
- /*
- =====================
- UI_DrawText
-
- Renders text on the screen
- =====================
- */
- void UI_DrawText ( float x, float y, qhandle_t font, float scale, vec4_t color, const char* text, int limit, int flags )
- {
- x *= uiInfo.uiDC.xscale;
- y *= uiInfo.uiDC.yscale;
- scale *= uiInfo.uiDC.xscale;
-
- trap_R_DrawText ( (int)x, (int)y, font, scale, color, text, limit, flags );
- }
-
- /*
- =====================
- UI_DrawTextWithCursor
-
- Renders text on the screen with a blinking cursor
- =====================
- */
- void UI_DrawTextWithCursor ( float x, float y, qhandle_t font, float scale, vec4_t color, const char* text, int limit, int flags, int cursorPos, char cursor )
- {
- x *= uiInfo.uiDC.xscale;
- y *= uiInfo.uiDC.yscale;
- scale *= uiInfo.uiDC.xscale;
-
- trap_R_DrawTextWithCursor ( (int)x, (int)y, font, scale, color, text, limit, flags, cursorPos, cursor );
- }
-